

#include <iostream>
#include <string>
#include <ctime>
#include <sstream>
#include <string>

#include "ServerSocket.h"
#include "SocketException.h"

#include "Severino.h"

using namespace std;


void Severino::open(int porta){
	cout << "Servidor Iniciado. Porta: " << porta << endl;
	time(&hoje);
	string timestr;
	timestr.clear();
	timestr.append(ctime(&hoje));
	timestr = timestr.substr(0,timestr.size()-1);
	cout << "--> " <<  timestr << endl << endl ;
	try{
		//Cria socket
		if(first){
			server = new ServerSocket (porta);
			first = false;
		}
	}catch ( SocketException& e ){
		std::cout << "Exception: " << e.description() << endl;
	}
	
//	  try{
//	      //Cria socket
//		  server = new ServerSocket (porta) ;
//	      while ( true ){
//			  server->accept(new_sock);  //Espera aqui...
//		  try{
//		      while (true){
//				  
//				  new_sock >> msg_recive;
//				  cout << "Msg recebida: " << msg_recive << endl;
//				  
//				  msg_send = "Hash(" + msg_recive + ") = ";
//				  msg_send += "0x1234567890";
//				  msg_send += "\n";
//				  
//			      cout << "Enviando: " << msg_send;
//				  new_sock << msg_send;
//				  
//		      }
//		   }
//		  catch ( SocketException& jj) {
//			  
//			  cout << "Passou aqui com: " << jj.description() << endl;
//		  }
//		}
//	  }catch ( SocketException& e ){
//	      std::cout << "Exception: " << e.description() << endl;
//	  }
}

void Severino::get(string & msg_in){
	string ip_msg;
	msg_in = "";
	try{
		server->accept(new_sock);  //Espera aqui...
		new_sock >> ip_msg;
		new_sock >> msg_recive;
		msg_in += msg_recive;
	}catch ( SocketException& jj) {
//		cout << "Passou aqui com: " << jj.description() << endl;
	}
	cout << "Msg recebida antes: " << msg_in << endl;
	logFile << ip_msg << "::\"" << msg_in << "\"::\"";

	int msg_size = msg_in.size();

	for(int kk = 0; kk < msg_size; kk++){

		int char_value = int(msg_in[kk]);
		//se valido, continua
		if( ((char_value>= 97)&&(char_value<=122)) || ((char_value>=48)&&(char_value<=57)) || (char_value==43)) continue; 

		if(char_value == -31) msg_in[kk] = 'a';
		else if(char_value == -23) msg_in[kk] = 'e';
		else if(char_value == -19) msg_in[kk] = 'i';
		else if(char_value == -13) msg_in[kk] = 'o';
		else if(char_value == -6) msg_in[kk] = 'u';
		else if(char_value == -25) msg_in[kk] = 'c';
		else if(char_value == -32) msg_in[kk] = 'a';

		else if(char_value == -29) msg_in[kk] = 'a';
		else if(char_value == -11) msg_in[kk] = 'o';
		else if(char_value == -4) msg_in[kk] = 'u';
 
		else{
			cout << "Char["<< kk <<"]: " << msg_in[kk] << " - value: " << int(msg_in[kk]) << endl;
			msg_in[kk] = '+';
		}

	}
	cout << "Msg recebida final: " << msg_in << endl;
	cout << "Do IP: " << ip_msg << endl;
	logFile << msg_in << "\"" << endl;
}

void Severino::send(string & msg_out){
	try{
		stringstream converte;
		converte << msg_out.size();
		new_sock << converte.str();
		new_sock << msg_out;
	}catch ( SocketException& jj){
//		cout << "Passou aqui com: " << jj.description() << endl;
	}
	cout << "Msg enviada: " << msg_out << endl;
}
